package com.zzh.zzhaiagent.utils;

import cn.hutool.core.util.NumberUtil;
import com.zzh.zzhaiagent.domain.vo.UserProfilesVO;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

/**
 * 专属于 web 包的工具类
 * 存储Request的Attribute进行上下文存储信息
 */
public class WebFrameworkUtils {

    private static final String REQUEST_ATTRIBUTE_LOGIN_USER_ID = "login_user_id";
    private static final String REQUEST_ATTRIBUTE_LOGIN_USER_TYPE = "login_user_type";
    private static final String REQUEST_ATTRIBUTE_USER_INFO = "login_user_info";


    /**
     * 设置用户id
     * @param request 请求
     * @param userId  用户id
     */
    public static void setLoginUserId(ServletRequest request, String userId) {
        request.setAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_ID, userId);
    }

    /**
     * 设置用户类型
     * @param request 请求
     * @param userType 用户类型
     */
    public static void setLoginUserType(ServletRequest request, Integer userType) {
        request.setAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_TYPE, userType);
    }

    /**
     * 设置用户信息
     * @param request 请求
     * @param userInfo 用户信息
     */
    public static void setUserInfo(ServletRequest request, UserProfilesVO userInfo) {
        request.setAttribute(REQUEST_ATTRIBUTE_USER_INFO, userInfo);
    }

    /**
     * 获得当前用户的编号，从请求中
     * 注意：该方法仅限于 framework 框架使用！！！
     * @param request 请求
     * @return 用户编号
     */
    public static String getLoginUserId(HttpServletRequest request) {
        if (request == null) {
            return null;
        }
        return (String) request.getAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_ID);
    }

    /**
     * 获得当前用户的类型
     * 注意：该方法仅限于 web 相关的 framework 组件使用！！！
     *
     * @param request 请求
     * @return 用户编号
     */
    public static Integer getLoginUserType(HttpServletRequest request) {//todo 待优化
        if (request == null) {
            return null;
        }
        // 1. 优先，从 Attribute 中获取
        Integer userType = (Integer) request.getAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_TYPE);
        if (userType != null) {
            return userType;
        }
        return null;
    }


    /**
     * 获取用户信息
     */
    public static UserProfilesVO getUserInfo(ServletRequest request) {
        if (request == null) {
            return null;
        }
        return (UserProfilesVO) request.getAttribute(REQUEST_ATTRIBUTE_USER_INFO);
    }


    /**
     * 移除用户id
     * @param request 请求
     */
    public static void removeLoginUserId(ServletRequest request) {
        request.removeAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_ID);
    }

    /**
     * 移除用户类型
     * @param request 请求
     */
    public static void removeLoginUserType(ServletRequest request) {
        request.removeAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_TYPE);
    }

    /**
     * 移除用户信息
     * @param request 请求
     */
    public static void removeUserInfo(ServletRequest request) {
        request.removeAttribute(REQUEST_ATTRIBUTE_USER_INFO);
    }


}
